<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<link href="css/zTreeStyle/zTreeStyle.css" rel="stylesheet" type="text/css">					<!-- zTree CSS函式庫 -->
<link href="css/redmond/jquery-ui-1.10.3.custom.min.css" rel="stylesheet" type="text/css">	<!-- jquery UI CSS函式庫 -->
<link href="css/selfTemplate.css" rel="stylesheet" type="text/css">							<!-- 自建CSS函式庫 -->

<script src="js/jquery-1.10.2.min.js" type="text/javascript"></script>								<!-- jquery 函式庫 -->
<script src="js/jquery-ui-1.10.3.custom.js" type="text/javascript"></script>					<!-- jquery UI 函式庫 -->
<script src="js/jquery.cookie.js" type="text/javascript"></script>								<!-- 操做cookie用 -->
<script src="js/jquery.ztree.core-3.5.min.js" type="text/javascript"></script>						<!-- zTree 的核心函式庫，選擇SVN用 -->
<script src="js/jquery.ztree.excheck-3.5.min.js" type="text/javascript"></script>				<!-- zTree 的延伸函式庫，選擇SVN用 -->
<script src="js/widgets.js" type="text/javascript"></script>									<!-- 自建函式庫 -->


<style type="text/css">
	div#mainDiv {
		padding-top:20px;
		padding-buttom:20px; 
		padding-right:20px;
		padding-left:15px; 
		
	}

	div#divTabs {
		vertical-align: text-top;
	}
	
</style>

<script type="text/javascript">


/** 為了產生zTree的參數 **/
var setting = { check:{ enable:true,chkStyle:"radio",radioType:"all"},data:{simpleData: {enable:true}}/* ,callback:{onCheck:onCheck} */};
var initialValue = 45;

//主管按下同意或拒絕的鈕
function reply(obj) {
	
	$(".reply").prop("disabled",true);	//將操作的按鈕給disable

	$.ajax({ type:"post",url:"ApproveAddModUnit",dataType:"text",async:false,
		data: {
			toDoListId:$(obj).attr("toDoListId"),
			modUnitId:$("#modUnitId").val(),
			subsysId:$("select#subsysId option:selected").val(),
			creatorId:$(obj).attr("creatorId"),
			empId:$.cookie("empId"),
			craId:$(obj).attr("craId"),
			isApprove:$(obj).attr("isApprove")
		}, success : function(reses) {
			$("#backToDoList").show();
		}, error : function(xhr, ajaxOptions, thrownError) { errorAjx(xhr); }
	});
}

/** 選擇了SVN樹狀圖中，某個資料夾後，需執行的動作**/
function onCheck(e,treeId,treeNode) {
	$("#svnPath").prop("size", 0.8*treeNode.id.length).val(treeNode.id).parent("td").removeClass("warning");
}


/** 點選SVN中的路徑位置 **/
function selSVNpath(obj) {	
	clearErrorMsg();
	windowFreeze();
	
	var subsysId = $("select#subsysId option:selected").val();
	
	//先確定該子系統 的SVN 連線無誤，再進行抓取
	// 0 無進行測試 1 沒有為此子系統設定 2 主機不能連 3 帳密不通  4 連線正常
	chkSVN4subsys(subsysId, $(obj).text() );
	
	var res= $("#resSVN4subsys").val();
	
	if (res==0) {
		errorMsgShow("SVN連線發生問題，請洽系統人員");
	} else if (res==1) {
		errorMsgShow("沒有為此子系統設定SVN，請洽系統人員");
	} else if (res==2) {
		errorMsgShow("所設定的主機連線失敗，請洽系統人員");
	} else if (res==3) {
		errorMsgShow("所設定的帳密登入失敗，請洽系統人員");
	} else {	//連線成功
		var isMR = $(obj).text()=="MR"?true:false;
	
		$.ajax({ type:'post',url:'QuerySVNdirInJson',dataType:'text',async:false,
			data: {subsysId:subsysId,isMR:isMR }, //送出子系統，以確定要使用該子系統的SVN
			success : function(reses) {
				reses = reses.substring(1,(reses.length-1));
			
				$.fn.zTree.init( $("#treeDirectory"),setting, JSON.parse(reses) );
				var treeObj = $.fn.zTree.getZTreeObj("treeDirectory");
				treeObj.expandAll(false);
				$("#dialogSVNdirectory").prop("title","選擇SVN路徑").css("visibility", "visible").dialog({
					resizable:true,width:300,modUnital:true,show:"fold",hide:"fold",
					buttons : {
						"確定" : function() {
							if ( treeObj.getCheckedNodes().length == 1 ) {	//有點選節點才進行下列運算
								var treeNodeId = treeObj.getCheckedNodes()[0].id;
								$("#svnPath"+$(obj).text() ).prop("size", 0.8*(treeNodeId.length)).val(treeNodeId).parent("td").removeClass("warning");
								$(obj).button( "option", "icons", { primary: "ui-icon-check"} );
							}
							$(this).dialog("close");
						},"關閉" :function() {
							$(this).dialog("close");
						}
					}
				});
			}, error : function(xhr, ajaxOptions, thrownError) { errorAjx(xhr); }
		});
	} // end of else
	$("#resSVN4subsys").val("0");	//執行完驗證，將它重設為未測試的狀態，即0
	windowUnfreeze();
}

/** 檢查"畫面"上要送出的資料是否完整 **/
/*
	1. 封裝檔的名稱與需求都有填
	3. SVN路徑有選擇
	5. 模組名稱有輸入
	6. 封裝檔的新增依據有選
	7. 可異動人員有選
*/
function validateThisPage(){
	
	var isOK=true;
	
	//檢查前的初始化
	$("td.warning").removeClass("warning");	//清空紅框
	clearErrorMsg();	//清除既有錯誤訊息
	
	//1,3,5
	$("div#mainDiv input[type='text']").each(function(i){
		if (!$(this).val()) {
			$(this).parent('td').addClass('warning');
			isOK=false;
		}
	});
	
	//6
	if( $("#tbodyReq tr").size()==0 ) {
		isOK=false;
		errorMsgShow("必須設定新增依據!");
	}
	
	//7
	if( $("#tbodyPerformer tr").size()==0 ) {
		isOK=false;
		errorMsgShow("必須設定可異動人員!");
	}
	
	return isOK;
}

/** 產生一個新的模組 **/


/** 檢查"後端"，是否能產生目前設定的模組  **/
/*
	同個子系統下沒有重覆名稱的模組存在
*/
function chkBackEndmodUnit() {
	isOK=true;
	
	subsysId = $("select#subsysId option:selected").val(); 
	modUnitId = $("#modUnitId").val();
	 
	$.ajax({ type:"post",url:"IsPathExist",dataType:"text",async:false,
			data: {subsysId:subsysId,modUnitId:modUnitId},
		success : function(reses) {
			if ( reses=="true" ) {
				isOK=false; 
			}
		},error : function(xhr, ajaxOptions, thrownError) { errorAjx(xhr); }
	});
	
	return isOK;
}

$(document).ready(function(){
	
	init("modUnit.html");
	var t = querySubsys($.cookie("empId"),$.cookie("pageName"),"subsysId");
	
	if( t==1 ) {
		windowFreeze("畫面初始中");
		
		
		
		//為了重覆使用此頁面，利用此cookie來辨別目前的動作
		if ( $.cookie("actType") !=undefined ) {
		
			//表示正在是審查新增模組
			if ( $.cookie("actType") == "review" ) {
				var modUnit = JSON.parse( $.cookie("modUnit") );
				$.removeCookie("actType");			//供頁面辨別目前這個頁面要如何回應
				$.removeCookie("modUnit");				//儲存模組的基本資料
				$("#subsysId").val(modUnit.subsysId);
				$("#modUnitId").val(modUnit.modUnitId);
				$("input:radio[name=modUnitType]").filter("[value="+modUnit.modUnitTypeId+"]").prop("checked", true);
				$("#svnPathMR").val(modUnit.mrSvnPath);
				$("#svnPathOL").val(modUnit.olSvnPath);
				$("#modUnitComment").val(modUnit.comment);
				
				
				$.each(modUnit.reqs, function(i,req){
					tmp = "<tr>"+
							"<td class='center'><button class='editable' type='button'>-</button></td>"+
							"<td class='idx'>"+(i+1)+"</td>"+
							"<td class='left idx'>"+req.reqDesc+"</td>"+
							"</tr>";
					$("#tbodyReq").append(tmp);
				});
				refreshUI(1,"tbodyReq",false);
				
				$.each(modUnit.performers, function(i,performer){
					tmp = "<tr>"+
							"<td class='center'><button class='editable' type='button'>-</button></td>"+
							"<td class='idx'>"+(i+1)+"</td>"+
							"<td>"+(Boolean(performer.isRole)?"角色":"員工")+"</td>"+
							"<td>"+performer.performerName+"</td>"+
							"</tr>";
					$("#tbodyPerformer").append(tmp);
				});
				refreshUI(1,"tbodyPerformer",false);
				
	 			$(".editable").prop("disabled",true);	//因為是Review，所以將所有輸鈕都disable
	 			
	 			$("#actName").html("--審查新增模組--");
	 			
	 			tmp="<button class='reply' type='button' onclick='reply(this)' creatorId='"+modUnit.creatorId+"' toDoListId='"+$.cookie("toDoListId")+"' isApprove='1' craId='"+$.cookie("craId")+"'>同意</button> &nbsp; "+
	 				"<button class='reply' type='button' onclick='reply(this)' creatorId='"+modUnit.creatorId+"' toDoListId='"+$.cookie("toDoListId")+"' isApprove='0' craId='"+$.cookie("craId")+"'>拒絕</button> &nbsp; "+
	 				"<p><textarea class='reply'></textarea><p>"+
	 				"<button id='backToDoList' type='button' onclick=\"window.location='toDoList.html'\">回到待辦事項</button>";
	 			$("#divReview").append(tmp);
	 			$("#backToDoList").hide();
	 			$.removeCookie("craId");
	 			$.removeCookie("toDoListId");
			}
		} else {
			$("input[type='text']").val("").prop("maxlength",20).prop("size", $("input[type='text']").prop("maxlength")*0.8 );
			$(".editable").prop("disabled",false);
		}
		
		
		//送出鈕
		$("#btnSubmit").bind("click", function(){
			windowFreeze();
			if ( validateThisPage() ) {	//檢查本身UI所需要的資料已收集完整
				if ( chkBackEndmodUnit() ) { //檢查後端
					
					/**開始產生json格式後傳*****/
					
					/**會有多個物件，如可異動人員、新增依據、封裝檔*****/
					var performers=[];	//可異動人員
					var reqs=[];		//新增依據

					$("#tbodyPerformer tr").each(function(i) {
						var performer = {
							"isRole":$(this).children("td").children("button").attr("isrole"),
							"performerId":$(this).children("td").children("button").val()
						};
						performers.push( performer );
					});

					//新增依據
					$("#tbodyReq tr").each(function(i) {
						var req = {"reqId":$(this).children("td:last").attr("reqid")};
						reqs.push( req );
					});
					
				
					/*****會有多個可能的物件，如異動人員、新增依據、模組**/
				
					var modUnitJson = {
						"modUnitId":$("#modUnitId").val(),							//模組名稱
						"mrSvnPath":$("#svnPathMR").val(),						//SVN AP MR 裡的路徑
						"olSvnPath":$("#svnPathOL").val(),						//SVN AP OL 裡的路徑
						"modUnitTypeId":$("input[name='modUnitType']:checked").val(),	//模組類型
						"comment":$("#modUnitComment").val(),						//模組的註解
						"reqs":reqs,											//新增依據
						"performers":performers									//可異動人員
					};
					/*****開始產生json格式後傳**/
					modUnitJson = JSON.stringify(modUnitJson);
					
					
					//確認模組定義上沒有重覆
					$.ajax({type:"post",url:"IsModUnitDuplicated",dataType:"text",async:false,
						data:{ modUnitJson:modUnitJson,subsysId:$("select#subsysId option:selected").val(),modUnitId:$("#modUnitId").val() },
						success : function(reses) {
							if (reses == "false") {
								$.ajax({type:"post",url:"CreateModUnit",dataType:"text",async:false,
									data:{ modUnitJson:modUnitJson,subsysId:$("select#subsysId option:selected").val(),empId:$.cookie("empId") },
									success : function(reses) {
										windowUnfreeze();
										if (reses != "Done") {
											errorMsgShow(reses);
										} else { alert("完成"); }
									},error : function(xhr, ajaxOptions, thrownError) { errorAjx(xhr); }
								});
							} else if (reses=="true") {
								errorMsgShow("此模組ID已被使用");
							} else {
								errorMsgShow(reses);
							}
						},error : function(xhr, ajaxOptions, thrownError) { errorAjx(xhr); }
					});
				} else {
					errorMsgShow("此模組的SVN路徑上，名稱已被使用，請換一個");
				}
			}
			windowUnfreeze();
		});
		
		//點選新增「可異動人員」
		$("#btnAddPerformer").bind("click", function(){
			addPerformer("Performer");
		});
		
		//點選新增「新增依據」
		$("#btnAddReq").bind("click", function(){
			clearErrorMsg();
			windowFreeze();
			queryReqINsubsys( $("select#subsysId option:selected").val(),"Req","");
			windowUnfreeze();
		});
		
		//點選設定檔
		$("#btnPfPiker").bind("click", function(){
			clearErrorMsg();
			windowFreeze();
			queryPfINsubsys( $("select#subsysId option:selected").val() );
			windowUnfreeze();
		});
		
		//提交時欲部署的模組
		$("#btnAddMod").bind("click", function(){
			clearErrorMsg();
			windowFreeze();
			queryMods( $("select#subsysId option:selected").val() );
			windowUnfreeze();
		});
		
		//變更了所選擇的子系統
		$("#subsysId").focus(function() {
			$("#subsysId").prop("previous",this.value);	
		}).change(function() {
			/*
				刪除 1.所選擇的SVN MR 2.需求依據 3.可異動人員 4.設定檔 5.所選擇的SVN OL
			*/
			
			//比對下列欄位，只要不為空，就需要進行確認
			if ( $("#pfId").val().length>0 || $("#svnPathOL").val().length>0 || $("#svnPathMR").val().length>0 || $("#modUnitId").val().length>0 || $("#tbodyReq tr.idx").size()>0 ) {
				
				tmp = "<br/>您變更了所選擇的子系統，畫面中既有的輸入將被移除，您確定要變更？";
				
				$("#diaConfirm").html(tmp).css("visibility", "visible").dialog({
					resizable:true,modUnital:true,show:"fold",hide:"fold",
					buttons : {
						"確定" : function() {
							$("#pfId").val(null);
							$("#modUnitId").val(null);
							$("#svnPathMR").val(null).prop("size",11).prop("maxlength",10);
							$("#svnPathOL").val(null).prop("size",11).prop("maxlength",10);
							$("#btnMRsvn").button({ icons: { primary:"ui-icon-info" } });
							$("#btnOLsvn").button({ icons: { primary:"ui-icon-info" } });
							$("#tbodyReq tr").remove();
							$(this).dialog("close");
						},"關閉" :function() {
							$("#subsysId").val($("#subsysId").prop("previous"));	//若使用者按下"關閉"，要恢復成原本的值
							$(this).dialog("close");
						}
					}
				}).prev().hide();
			}
		});

		$("div.radio").buttonset();
		$("#btnMRsvn").button({ icons: { primary:"ui-icon-info" } });
		$("#btnOLsvn").button({ icons: { primary:"ui-icon-info" } });
		$("button").button();
		$("#divTabs").tabs();
		
		setMainDivWidth(initialValue);
		windowUnfreeze();
	}
	
	
});

</script>
</head>
<body>
	<div id="header"></div>		<!-- 畫面抬頭 -->
	<div id="divReview"></div>	<!-- 主管review用 -->

	<div id="mainDiv" style="position:relative">
	<div style="position:absolute;padding-left:10px;padding-right:10px;right:0;">
			<div id="divTabs">
				<ul>
					<li><a href="#tabs-2"><label class="fr">*</label>新增依據</a></li>
					<li><a href="#tabs-3"><label class="fr">*</label>可異動人員</a></li>
					<li><a href="#tabs-4">建置相依性</a></li>
				</ul>
				<div id="tabs-2">
					<table id="tableReq">
						<thead class="tableFirst">
							<tr>
								<td><button class="editable" type='button' id="btnAddReq">+</button></td>
								<th>#</th>
								<th>需求描述</th>
							</tr>
						</thead>
						<tbody id="tbodyReq"></tbody>
					</table>
				</div>
				<div id="tabs-3">
					<table id="tablePerformer">
						<!-- 可操作的角色 -->
						<thead class="tableFirst">
							<tr>
								<td><button class="editable" type='button' id="btnAddPerformer">+</button></td>
								<th>#</th>
								<th>類型</th>
								<th>名稱</th>
							</tr>
						</thead>
						<tbody id="tbodyPerformer"></tbody>
					</table>
				</div>
				<div id="tabs-4">
				</div>
				<!-- <div id="tabs-5">
					<table id="tableMods">
						<thead class="tableFirst">
							<tr>
								<td><button class="hideable" type="button" id="btnAddMod">+</button></td>
								<th>#</th>
								<th>模組ID</th>
								<th>封裝檔</th>
								<th></th>
							</tr>
						</thead>
						<tbody id="tbodyMods"></tbody>
					</table>
				</div> -->
			</div>
		</div>
		<table>
			<tr><td class="left" colspan="4"><label class="thStyle" ><label for="divTabs" class="fr">*</label>為必選</label></td></tr>
			<tr><td colspan="4" ></td></tr>
			<tr>
				<th class="right">子系統：</th>
				<td class="left"><select class="editable" id="subsysId"><option>-請選擇-</option></select></td>
				<th class="right"><label class="fr">*</label>模組ID：</th>
				<td class="left"><input class="editable" id="modUnitId" type="text" /></td>
			</tr>
			<tr>
				<th class="right">類型：</th>
				<td class="left" colspan="3" ><div class="radio">
						<input class="editable" type="radio" id="radio1" name="modUnitType" checked value="1" />
						<label for="radio1">WEB</label>
						<input class="editable" type="radio" id="radio3" name="modUnitType" value="2" />
						<label for="radio3">C++</label>
						<input class="editable" type="radio" id="radio2" name="modUnitType" value="3" />
						<label for="radio2">shell</label>
					</div></td>
			</tr>
			<tr>
				<th rowspan="2" class="right"><label class="fr">*</label>SVN路徑：</th>
				<td class="left" colspan="3">
					<button class="editable" id="btnMRsvn" type="button" onclick="selSVNpath(this)">MR</button>
					<input id="svnPathMR" type="text" size="15" maxlength="14" disabled />
				</td>
			</tr>
			<tr>
				<td class="left" colspan="3">
					<button class="editable" id="btnOLsvn" type="button" onclick="selSVNpath(this)">OL</button>
					<input id="svnPathOL" type="text" size="15" maxlength="14" disabled />
				</td>
			</tr>
			<tr>
				<th class="left" colspan="4">備註</th>
			</tr>
			<tr>
				<th class="left" colspan="4"><textarea class="editable" id="modUnitComment" cols="27"></textarea><br />
				<button type="button" class="editable" id="btnSubmit">送出</button></th>
			</tr>
		</table>
		
	</div>
	<p>
	<p>
</body>



<div class="dialog" id="dialogSVNdirectory">
	<ul id="treeDirectory" class="ztree"></ul>
</div>

<input type="hidden" id="resSVN4subsys" value=0>
<!-- 確認指定子系統下，其SVN的連線結果，0表示尚未測試，4表示成功，每次操作完應歸0 -->

<!-- 選取需求的對話窗 -->
<div class="dialog" id="reqsPicker">
	<table id="tableReqPicker">
		<thead class="tableFirst">
			<tr>
				<th class="center"><input id="tableReqPickerChkALL" onclick="chkALL(this);" type="checkbox" /></th>
				<th>#</th>
				<th>需求描述</th>
				<th>需求ID</th>
				<th>創建日期</th>
				<th>創建人員</th>
			</tr>
		</thead>
		<tbody id="tbodyReqPicker"></tbody>
	</table>
</div>

<!-- 選取設定檔的對話窗 -->
<div class="dialog" id="pfsPicker">
	<table id="tablePfPicker">
		<thead class="tableFirst">
			<tr>
				<th class="center">&nbsp;</th>
				<th>#</th>
				<th>Profile名稱</th>
				<th>ProfileID</th>
				<th>jenkins設定ID</th>					
			</tr>
		</thead>
		<tbody id="tbodyPfPicker"></tbody>
	</table>
</div>

<!-- 單純確認的對話框 -->
<div class="dialog" id="diaConfirm"></div>

<!-- 對話框，供選擇可以異動此模組的人員或角色 -->
<div class="dialog" id="performerPicker"></div>

<!-- 選擇部署相依的模組 
<div class="dialog" id="modsPicker">
	<table id="tableModsPicker">
		<thead class="tableFirst">
			<tr>
				<td colspan="3"></td>
			</tr>
			<tr>
				<th class="center"><input id="tableModsPickerChkALL" onclick="chkALL(this);" type="checkbox" /></th>
				<th class="center">#</th>
				<th>模組ID</th>
			</tr>
		</thead>
		<tbody id="tbodyModsPicker"></tbody>
	</table>
</div>-->

</html>